﻿using System;
using System.Collections.Generic;
using System.Linq;
using PortalCurriculo.Domain;
using PortalCurriculo.Domain.Utils;
using PortalCurriculo.Util.Translation;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.UserControls.Curriculo.Cadastro
{
    public partial class NecessidadeEspecial : Curriculo, ICurriculo
    {
        public List<DeficienciaProfissional> Entidades { private get; set; }

        public string ValidationGroup
        {
            get { return ddlCaracteristica.ValidationGroup; }
            set { ddlCaracteristica.ValidationGroup = ddlDeficiencia.ValidationGroup = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            ddlDeficiencia.TextChanged += OnChangeControl;

            if (IsPostBack) return;

            PreencherDropDownLists();
        }

        private void PreencherDropDownLists()
        {
            WebHelper.FillDropDownList(ddlDeficiencia,
                                       new Deficiencia().SelectAllActive<Deficiencia>().OrderBy(def => def.Descricao),
                                       false);
            PreencherCaracteristica();
        }

        private void PreencherCaracteristica()
        {
            WebHelper.FillDropDownList(ddlCaracteristica,
                                       new CaracteristicaDeficiencia { IdDeficiencia = int.Parse(ddlDeficiencia.SelectedValue) }.
                                           SelecionarPorDeficiencia(), false);
        }

        public void Editar()
        {
            var deficiencia = (from linq in Entidades
                               where linq.Id.Equals(IdEntidade)
                               select linq).FirstOrDefault();

            ddlDeficiencia.SelectedValue = deficiencia.CaracteristicaDeficiencia.IdDeficiencia.ToString();
            PreencherCaracteristica();
            ddlCaracteristica.SelectedValue = deficiencia.IdCaracteristicaDeficiencia.ToString();
        }

        protected void ddlDeficiencia_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherCaracteristica();
        }

        public void LimparCampos()
        {
            ddlDeficiencia.SelectedIndex = 0;
            ddlCaracteristica.SelectedIndex = 0;
        }

        public void Salvar()
        {
            bool deficienciaCadastrado = (from linq in Entidades
                                          where linq.IdCaracteristicaDeficiencia ==
                                              int.Parse(ddlCaracteristica.SelectedValue)
                                              && (linq.Id != IdEntidade || IsNew)
                                          select true).FirstOrDefault();

            if (deficienciaCadastrado)
                throw new AlreadyExistsException(Translator.TranslateMessage(Messages.DeficienciaJaCadastrada, AppRelativeVirtualPath));

            var deficiencia = IsNew
                                  ? new DeficienciaProfissional()
                                  : Entidades.Where(esp => esp.Id == IdEntidade).FirstOrDefault();
            deficiencia.Ativo = true;
            deficiencia.IdProfissional = new Domain.Profissional{IdUsuario = IdUsuario}.Selecionar().Id;
            deficiencia.IdCaracteristicaDeficiencia = int.Parse(ddlCaracteristica.SelectedValue);
            new GeneralAction(deficiencia).Save();

            if (IsNew)
                Entidades.Add(deficiencia);
        }
    }
}